/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


// Отображает указанный объект в виде диалога с кнопками Ok,Cancel.
// onOk - событие при нажатии Ок.
// onCancel - событие при нажатии Cancel.
function showDialog(obj, onOk, onCancel)
{
	if (!onOk) onOk = '0==0';
	if (!onCancel) onCancel = '0==0';
	obj = document.getElementById(obj);
	obj.className = 'dialog';

	var html = obj.innerHTML;
	var newHtml = '<div class="header">' + obj.title + '</div>';
	newHtml += '<div class="container">' +  html + '</div>';

	if (jQuery(obj).find('#buttons input').length == 0)
	{
		newHtml += '<div align="center" id="buttons">' +
			'<input type="button" value="Ok"><input type="button" value="Cancel"></div>';
		obj.innerHTML = newHtml;
	}

	var btns = jQuery(obj).find('#buttons input');
	if (typeof(onOk) == 'string') eval('onOk = function(){' + onOk + '};');
	if (typeof(onCancel) == 'string') eval('onCancel = function(){' + onCancel + '};');
	btns[0].onclick = function() {onOk(); jQuery('#' + obj.id).hide()};
	btns[1].onclick = function() {onCancel(); jQuery('#' + obj.id).hide()};

	jQuery(obj).show();
	obj.style.left = (document.body.clientWidth - obj.clientWidth) / 2 + 'px';
	obj.style.top = (document.body.clientHeight - obj.clientHeight) / 2 + 'px';
}


// Разворачивающийся блок.
function MyRoll(obj)
{
	if (typeof(obj) == 'string') obj = document.getElementById(obj);
	var cont = jQuery(obj.parentNode.parentNode).find('.body')[0];
	cont.style.display =  (cont.style.display == 'none') ? 'block' : 'none';
	obj.innerHTML = (cont.style.display == 'none') ? '&gt;' : '&lt;';
}

// Создать cворачивающуюся секцию.
function createRoll(obj, closed)
{
	var symb = closed ? '&gt;' : '&lt;';
	var disp = closed ? 'none' : 'block';

	if (typeof(obj) == 'string') obj = document.getElementById(obj);
	var html = obj.innerHTML;
	var newHtml = '<div class="rollable">';
	newHtml += '<div class="header">' +
		'<div class="button" onClick="MyRoll(this)">' + symb + '</div>' + obj.title + '</div>' +
		'<div class="body" style="display:' + disp + '">' + html + '</div></div>';
	obj.innerHTML = newHtml;
	obj.title = '';
}


// Класс для работы со списком дат.
function CTimeTable(conf)
{
	// Настройки объекта.
	// cont(obj|id) - контейнер для вывода содержимого.
	// showInp(bool) - отображать ли встроенный контрол для ввода данных.
	// onAftAdd(func) - функция, вызываемая после добавления элемента.
	// onAftDel(func) - функция, вызываемая после удаления элемента.
	this.conf = conf ? conf : {};
	this.name = String('TimeTable' + Math.random()).replace('.', '');
	eval(this.name + '=this;');

	// Контейнер для вывода данных.
	var cont;
	if (this.conf.cont && (typeof(this.conf.cont) == 'string'))
		cont = document.getElementById(this.conf.cont);

	// Данные (список дат).
	var data = Array();

	this.toHtml = function()
	{
		data.sort();
		var res = '<ul>';
		var last = '';
		for (var i = 0; i < data.length; i++)
		{
			var it = data[i];
			var date = it.substr(0, 10);
			var time = it.substr(11);
			if (date != last)
			{
				if (last) res += '</ul></li>';
				res += '<li>' + date + '<ul>';
				last = date;
			}
			res += '<li><a href ="#" onclick="' + this.name + '.delItem(' + i + ')" ' +
				'title="Удалить">X</a> ' + time + '</li>';
		}
		res += '</ul></li>';
		res += '</ul>';
		return res;
	}

	// Обновить сожержимое контейнера.
	this.updateCont = function()
	{
		if (cont) cont.children[0].innerHTML = this.toHtml();
	}

	// Добавить элемент.
	this.addItem = function(date)
	{
		if (date)
			data.push(date);
		else if(cont && this.conf.showInp)
			data.push(jQuery(cont).find('input[id=input]').val());
		else return;

		if (this.conf.onAftAdd) this.conf.onAftAdd(this);
		this.updateCont();
	}

	// Удалить элемент.
	this.delItem = function(index)
	{
		data.splice(index, 1);
		if (this.conf.onAftDel) this.conf.onAftDel(this);
		this.updateCont();
	}

	this.clear = function()
	{
		data = Array();
		this.updateCont();
	}

	this.toString = function()
	{
		return data.join(';');
	}

	this.fromString = function(str)
	{
		data = str.split(';');
		if (data[data.length - 1] == '') data.pop();
		this.updateCont();
	}

	// Сохранить данные (отправить параметр dates по url).
	this.save = function(url)
	{
		jQuery.post(url, {dates: this.toString()});
	}

	// Загрузить данные (получить по url).
	this.load = function(url)
	{
		var s = this.name + '.fromString(res)';
		jQuery.post(url, {}, function(res) {eval(s)});
	}

	// Добавление контролов.
	if (cont)
	{
		var obj = jQuery(cont);
		obj.html('<div>&nbsp</div>');
		if (this.conf.showInp)
		{
			obj.append('<input id="input" />');
			obj.append('<input type="button" value="Добавить" onClick="' +
				this.name + '.addItem()" />');
		}
	}
}

// Словарь.
function dict(name, fname)
{
	this.name = name;
	this.fname = fname;
	this.values = Array();
	this.items = Array();

	this.add = function()
	{
		var val = document.getElementById('sel_' + this.name).value;
		this.items[val] = true;
		this.updateContainer();
	}

	this.del = function(key)
	{
		this.items[key] = false;
		this.updateContainer();
	}

	this.updateContainer = function()
	{
		var cont = document.getElementById('cont_' + this.name);
		var html = '<input type="hidden" name=' + this.fname + ' value=' + this.getValues() + '>';
		html += '<table border="1">';
		html += '<tr><td>';
		html += '<select id="sel_' + this.name + '">';
		for (k in this.values)
			html += '<option value=' + k + '>' + '(' + k + ')' + this.values[k] + '</option>';
		html += '</select>';
		html += '</td><td>';

		html += '<input type="button" onclick="' + this.name + '.add()" value="+" />';
		html += '</td></tr>';

		// Data.
		for(k in this.items)
			if (this.items[k])
			{
				html += '<tr><td>' + this.values[k] + '</td><td>';
				html += '<input type="button" onclick="' + this.name + '.del(' + k + ')" value="-" /></td></tr>';
			}
		html += '</table>';
		cont.innerHTML = html;
	}

	this.itemsFromString = function(str)
	{
		var items = str.replace(/\(/g, '').split(')');
		items.pop();
		for (var k in items)
			this.items[items[k]] = true;
	}

	this.getValues = function()
	{
		res = '';
		for(k in this.items)
			if (this.items[k])
				res += '(' + k + ')'
		return res;
	}
}


// Левое меню
function selectStorage()
{
	var name = jQuery('#selectStorDialog #storage_name').val();
	document.location = '<?=$prelink?>&m0_cmd=<?=$cmd?>&m0_name=' + name;
}
